'use strict';

const db = uniCloud.database();
const crypto = require('crypto');

exports.main = async (event, context) => {
  const { mobile, password, code, loginType } = event; // loginType: 'password' | 'sms'
  
  // 参数校验
  if (!mobile) {
    return {
      code: 400,
      message: '手机号为必填项'
    };
  }
  
  if (!password && !code) {
    return {
      code: 400,
      message: '密码或验证码为必填项'
    };
  }
  
  // 手机号格式校验
  const mobileRegex = /^1[3-9]\d{9}$/;
  if (!mobileRegex.test(mobile)) {
    return {
      code: 400,
      message: '手机号格式错误'
    };
  }
  
  try {
    const userCollection = db.collection('uni-id-users');
    
    // 查找用户
    const userRes = await userCollection.where({
      mobile: mobile
    }).get();
    
    if (userRes.data.length === 0) {
      return {
        code: 400,
        message: '用户不存在，请先注册'
      };
    }
    
    const user = userRes.data[0];
    
    // 检查用户状态
    if (user.status === 1) {
      return {
        code: 403,
        message: '账号已被禁用，请联系客服'
      };
    }
    
    // 验证码登录
    if (loginType === 'sms' && code) {
      const codeCollection = db.collection('sms-codes');
      const codeRes = await codeCollection.where({
        mobile: mobile,
        code: code,
        type: 'login',
        used: false,
        expire_time: db.command.gt(new Date())
      }).get();
      
      if (codeRes.data.length === 0) {
        return {
          code: 400,
          message: '验证码无效或已过期'
        };
      }
      
      // 标记验证码已使用
      await codeCollection.doc(codeRes.data[0]._id).update({
        used: true
      });
    }
    // 密码登录
    else if (loginType === 'password' && password) {
      const hashedPassword = crypto.createHash('md5').update(password + 'saltstring').digest('hex');
      
      if (user.password !== hashedPassword) {
        return {
          code: 400,
          message: '密码错误'
        };
      }
    } else {
      return {
        code: 400,
        message: '登录方式错误'
      };
    }
    
    // 更新最后登录信息
    const clientIP = context.CLIENTIP || '0.0.0.0';
    await userCollection.doc(user._id).update({
      last_login_date: new Date(),
      last_login_ip: clientIP
    });
    
    // 生成简单的token（实际项目中建议使用JWT）
    const token = crypto.createHash('md5').update(user._id + Date.now() + 'tokenSalt').digest('hex');
    
    return {
      code: 200,
      message: '登录成功',
      data: {
        uid: user._id,
        mobile: user.mobile,
        nickname: user.nickname,
        avatar: user.avatar,
        token: token
      }
    };
    
  } catch (error) {
    console.error('用户登录错误：', error);
    return {
      code: 500,
      message: '服务器错误，请重试'
    };
  }
};